﻿// ***********************************************************************
// Apache 2.0 License
// Licensed under the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License. You may obtain
// a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 
//
// THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
// ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY 
// IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR 
// PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
//
// See the Apache Version 2.0 License for specific language governing
// permissions and limitations under the License.
// ***********************************************************************
// Assembly  : ContractMeow.Api.Dtos
// File      : FileAttachment.cs
//
// ***********************************************************************
using ContractMeow.Api.Dtos.Serialization;
using Newtonsoft.Json;
using System;

namespace ContractMeow.Api.Dtos.Attachment
{
	/// <summary>
	/// Yammer File Attachment object that maps directly to the Yammer API
	/// </summary>
    public class FileAttachment : AttachmentBase, IFileAttachment
    {
        #region IAttachment

		/// <summary>
		/// Gets the type.
		/// </summary>
		/// <value>The type.</value>
        [JsonProperty( "type" )]
        public override String Type
        {
            get { return "file"; }
            set {}
        }

        #endregion

		#region IFileAttachment
		/// <summary>
		/// Gets or sets the content class.
		/// </summary>
		/// <value>The content class.</value>
        [JsonProperty( "content_class" )]
        public String ContentClass { get; set; }

		/// <summary>
		/// Gets or sets the type of the content.
		/// </summary>
		/// <value>The type of the content.</value>
        [JsonProperty( "content_type" )]
        public String ContentType { get; set; }

		/// <summary>
		/// Gets or sets the download URL.
		/// </summary>
		/// <value>The download URL.</value>
        [JsonProperty( "download_url" )]
        public Uri DownloadUrl { get; set; }
		
		/// <summary>
		/// Gets or sets the file.
		/// </summary>
		/// <value>The file.</value>
        [JsonProperty( "file" )]
        public File File { get; set; }

		/// <summary>
		/// Gets or sets the full name.
		/// </summary>
		/// <value>The full name.</value>
        [JsonProperty( "full_name" )]
        public String FullName { get; set; }

		/// <summary>
		/// Gets or sets the large icon URL.
		/// </summary>
		/// <value>The large icon URL.</value>
        [JsonProperty( "large_icon_url" )]
        public Uri LargeIconUrl { get; set; }

		/// <summary>
		/// Gets or sets the last uploaded at.
		/// </summary>
		/// <value>The last uploaded at.</value>
        [JsonProperty( "last_uploaded_at" )]
        public DateTimeOffset LastUploadedAt { get; set; }

		/// <summary>
		/// Gets or sets the last uploaded by id.
		/// </summary>
		/// <value>The last uploaded by id.</value>
        [JsonProperty( "last_uploaded_by_id" )]
        public Int64 LastUploadedById { get; set; }

		/// <summary>
		/// Gets or sets the last type of the uploaded by.
		/// </summary>
		/// <value>The last type of the uploaded by.</value>
        [JsonProperty( "last_uploaded_by_type" )]
        public String LastUploadedByType { get; set; }

		/// <summary>
		/// Gets or sets the is official.
		/// </summary>
		/// <value>The is official.</value>
        [JsonProperty( "official" )]
        public Boolean IsOfficial { get; set; }

		/// <summary>
		/// Gets or sets the name of the original.
		/// </summary>
		/// <value>The name of the original.</value>
        [JsonProperty( "original_name" )]
        public String OriginalName { get; set; }

		/// <summary>
		/// Gets or sets the overlay URL.
		/// </summary>
		/// <value>The overlay URL.</value>
        [JsonProperty( "overlay_url" )]
        public Uri OverlayUrl { get; set; }

		/// <summary>
		/// Gets or sets the owner id.
		/// </summary>
		/// <value>The owner id.</value>
        [JsonProperty( "owner_id" )]
        public Int64 OwnerId { get; set; }

		/// <summary>
		/// Gets or sets the type of the onwer.
		/// </summary>
		/// <value>The type of the onwer.</value>
        [JsonProperty( "owner_type" )]
        public String OwnerType { get; set; }

		/// <summary>
		/// Gets or sets the path.
		/// </summary>
		/// <value>The path.</value>
        [JsonProperty( "path" )]
        public String Path { get; set; }

		/// <summary>
		/// Gets or sets the preview URL.
		/// </summary>
		/// <value>The preview URL.</value>
        [JsonProperty( "preview_url" )]
        public Uri PreviewUrl { get; set; }

		/// <summary>
		/// Gets or sets the is public.
		/// </summary>
		/// <value>The is public.</value>
        [JsonProperty( "privacy" )]
        [JsonConverter(typeof(PrivacyJsonConverter))]
        public Boolean IsPublic { get; set; }

		/// <summary>
		/// Gets or sets the type of the real.
		/// </summary>
		/// <value>The type of the real.</value>
        [JsonProperty( "real_type" )]
        public String RealType { get; set; }

		/// <summary>
		/// Gets or sets the size.
		/// </summary>
		/// <value>The size.</value>
        [JsonProperty( "size" )]
        public Int64 Size { get; set; }

		/// <summary>
		/// Gets or sets the small icon URL.
		/// </summary>
		/// <value>The small icon URL.</value>
        [JsonProperty( "small_icon_url" )]
        public Uri SmallIconUrl { get; set; }

		/// <summary>
		/// Gets or sets the streaming URL.
		/// </summary>
		/// <value>The streaming URL.</value>
        [JsonProperty( "streaming_url" )]
        public Uri StreamingUrl { get; set; }

		/// <summary>
		/// Gets or sets the thumbnail URL.
		/// </summary>
		/// <value>The thumbnail URL.</value>
        [JsonProperty( "thumbnail_url" )]
        public Uri ThumbnailUrl { get; set; }

		/// <summary>
		/// Gets or sets the transcoded.
		/// </summary>
		/// <value>The transcoded.</value>
        [JsonProperty( "transcoded" )]
        public Boolean? Transcoded { get; set; }

		/// <summary>
		/// Gets or sets the UUID.
		/// </summary>
		/// <value>The UUID.</value>
        [JsonProperty( "uuid" )]
        public String Uuid { get; set; }

		/// <summary>
		/// Gets or sets the Y id.
		/// </summary>
		/// <value>The Y id.</value>
        [JsonProperty( "yid" )]
        public Int64 YId { get; set; }
		#endregion
    }
}